/**
 * VTypes
 */
Fw.util.VTypes = function() {
    //
    return {
        //Email
        emailRex : /^(")?(?:[^\."])(?:(?:[\.])?(?:[\w\-!#$%&'*+/=?^_`{|}~]))*\1@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/,
        //URL
        urlRex : /(((^https?)|(^ftp)):\/\/((([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*)|(localhost|LOCALHOST|127.0.0.1))\/?)/i,
        //英文字母、下划线
        alphaRex : /^[a-zA-Z_]+$/,
        //英文字母、数字、下划线
        alphanumRex : /^[a-zA-Z0-9_]+$/,
        //整数
        integerRex: /^-?\\d+$/,
        //特殊字符
        specialRex: /\'|\"|,|=|\{|\}|\[|\]$/,
        //手机号码
        cellphoneRex : /^((\+86)|(86)|0)?(1[3|4|5|7|8])\d{9}$/,
        //固话号码
        telephoneRex : /^(\d{3,4}-)?\d{7,8}$/,
        //邮政编码
        zipCodeRex: /^[a-zA-Z0-9]{3,12}$/,
        //汉字
        chineseRex : /^[\u4e00-\u9fa5 ]{1,5}$/,
        //英文字母
        englishRex: /^[a-zA-Z]+$/,
        //身份证号
        idCardRex : /(^\(^\d{18}$)|(^\d{17}(\d|X|x)$)/,
        //借记卡号
        debitCardRex : /^\d{16}$/,
        //信用卡号
        creditCardRex : /^((?:4\d{3})|(?:5[1-5]\d{2})|(?:6011)|(?:3[68]\d{2})|(?:30[012345]\d))[ -]?(\d{4})[ -]?(\d{4})[ -]?(\d{4}|3[4,7]\d{13})$/,

        //校验
        /**
         * Email
         */
        email : function(value) {
            return this.emailRex.test(value);
        },
        /**
         * URL
         */
        url : function(value) {
            return this.urlRex.test(value);
        },
        /**
         * 英文字母、下划线
         */
        alpha : function(value) {
            return this.alphaRex.test(value);
        },
        /**
         * 英文字母、数字、下划线
         */
        alphanum : function(value) {
            return this.alphanumRex.test(value);
        },
        /**
         * 数字
         */
        number : function(value) {
            return Fw.isNumber(value * 1);
        },
        /**
         * 整数
         */
        integer : function(value) {
            return this.integerRex.test(value);
        },
        /**
         * 日期（不支持long）
         */
        date : function(value) {
            return Fw.isNumber(value * 1) ? false : Fw.isDate(value) || Fw.isDate(Fw.util.Format.toDate(value));
        },
        /**
         * 含特殊字符
         */
        special : function(value) {
            if(Fw.isArray(value) || Fw.isObject(value)){
                var test = true;
                Fw.each(value, function(v1, v2){
                    test = !(this.specialRex.test(v1) || this.specialRex.test(v2));
                    return test;
                }, this);
                return !test;
            }
            return this.specialRex.test(value);
        },
        /**
         * 手机号码
         */
        cellphone : function(value) {
            return this.cellphoneRex.test(value);
        },
        /**
         * 固话号码
         */
        telephone : function(value) {
            return this.telephoneRex.test(value);
        },
        /**
         * 邮政编码
         */
        zipCode : function(value) {
            return this.zipCodeRex.test(value);
        },
        /**
         * 汉字
         */
        chinese : function(value) {
            return this.chineseRex.test(value);
        },
        /**
         * 英文字母
         */
        english : function(value) {
            return this.englishRex.test(value);
        },
        /**
         * 身份证号
         */
        idCard : function(value) {
            return this.idCardRex.test(value);
        },
        /**
         * 借记卡号
         */
        debitCard : function(value) {
            return this.debitCardRex.test(value);
        },
        /**
         * 信用卡号
         */
        cebitCard : function(value) {
            return this.cebitCardRex.test(value);
        }
    };
}();
